home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / keyb / dce.zip / DCE.SRC < prev    next >
Text File  |  1989-02-06  |  17KB  |  540 lines

  1.  
  2. '              *****    DCE    **    (C)1988-89, by GNA.    *****
  3.  
  4. '═════════════════════════════════════════════════════════════════════════════
  5.  
  6.    $SOUND 32
  7.    DEFINT E-Y:DEFDBL D,T,Z
  8.    Logiciel$="DCE":DebTemps&=TIMER
  9.  
  10. '═════════════════════════════════════════════════════════════════════════════
  11.  
  12. ' *** initialize registers ***
  13.  
  14.    %AX=1:%BX=2:%CX=3:%DX=4:%SI=5:%DI=6:%BP=7:%DS=8:%ES=9:%Status=0
  15.  
  16. ' *** initialize variables ***
  17.  
  18.    Ins=1:Marge=8:NoDerCde=0:Cour=0:Ecran=0:Comm$=UCASE$(COMMAND$)
  19.    %MaxCar=127:%MaxLig=46:%MaxCde=20:Vers$="9.4":Curs$=CHR$(219):DiskUtil$=""
  20.    Disk$="":Cde$="":DebCde$="":FinCde$="":Temp$="":Form$="####":Depr$="99:99"
  21.    Alarme$=Depr$:Deprog$=Logiciel$+CHR$(32)+"Alarm"+CHR$(32)+"inactive!"
  22.    Retour$="Return to":DIM Stor$(%MaxCde):DIM Debut(5):DIM CharSauv(6,74)
  23.    FlgCde=0:FlgCalc=0:FlgDate=0:FlgEDC=0:FlgSpec=0:FlgDisk=0:FlgAidePos=0
  24.    FlgAlrm=0:FlgAide=0:FlgASCII=0:FlgBell=0:FlgHorl=0:FlgGraph=0
  25.  
  26. ' *** static tab of 32 consecutives integers ***
  27.  
  28.    DIM STATIC NivRep(32)
  29.    Segment&=VARSEG(NivRep(0)):Offset&=VARPTR(NivRep(0))
  30.  
  31. '═════════════════════════════════════════════════════════════════════════════
  32.  
  33. ' *** the DCE's musics ***
  34.  
  35.    MusiAir$="MBL32O3CDEF":MusiErr$="MBL64O3FEDC"
  36.  
  37. ' *** if an ERROR occurs ***
  38.  
  39.    ON ERROR GOTO ERREUR
  40.  
  41. '═════════════════════════════════════════════════════════════════════════════
  42.  
  43. ' *** 80 columns, B&W mode and clear screen ***
  44.  
  45.    WIDTH 80:COLOR 7,0:CLS
  46.  
  47. '═════════════════════════════════════════════════════════════════════════════
  48.  
  49. ' *** verify the hardware & software environment ***
  50.  
  51. $INCLUDE "DCESTART.SRC"
  52.  
  53. '═════════════════════════════════════════════════════════════════════════════
  54.  
  55. ' *** abstracts ***
  56.  
  57.    IF (Comm$="") THEN
  58.       C$(1)= CHR$(201)+STRING$(43,205)+CHR$(187)
  59.       C$(2)= CHR$(186)+SPACE$(43)+CHR$(186)
  60.       C$(3)= CHR$(186)+SPACE$(13)+"***"+SPACE$(2)+Logiciel$+CHR$(32)+Vers$+_
  61.              SPACE$(2)+"***"+SPACE$(13)+CHR$(186)
  62.       C$(4)= CHR$(186)+SPACE$(43)+CHR$(186)
  63.       C$(5)= CHR$(186)+SPACE$(9)+"DOS"+SPACE$(2)+"Commands"+CHR$(32)+_
  64.              "line"+CHR$(32)+"Editor"+SPACE$(9)+CHR$(186)
  65.       C$(6)= CHR$(186)+CHR$(32)+"memorize the twenty later single commands"+_
  66.              CHR$(32)+CHR$(186)
  67.       C$(7)= CHR$(186)+SPACE$(43)+CHR$(186)
  68.       C$(8)= CHR$(186)+SPACE$(7)+"Copyright"+CHR$(32)+"(c)1988-89,"+_
  69.              CHR$(32)+"by"+SPACE$(2)+"GNA"+SPACE$(7)+CHR$(186)
  70.       C$(9)= CHR$(186)+SPACE$(43)+CHR$(186)
  71.       C$(10)=CHR$(200)+STRING$(43,205)+CHR$(188)
  72.       LigTaille=LEN(C$(1)):Lig=8:Col=80-LigTaille:Milieu=40
  73.  
  74. ' *** swing ... ***
  75.  
  76.       COLOR 3,0
  77.       FOR I=1 TO 17
  78.          FOR J=1 TO 9 STEP 2
  79.             LOCATE Lig+J,I:PRINT CHR$(32);C$(J)
  80.             LOCATE Lig+J+1,Col-I:PRINT C$(J+1);CHR$(32)
  81.          NEXT J
  82.          DELAY(0.03)
  83.       NEXT I
  84.       Col=19
  85.       LOCATE Lig+3,Col:COLOR 14,0:PRINT MID$(C$(3),2,LigTaille-2)
  86.       LOCATE Lig+5,Col:COLOR 15,0:PRINT MID$(C$(5),2,LigTaille-2)
  87.       LOCATE Lig+6,Col:COLOR 15,0:PRINT MID$(C$(6),2,LigTaille-2)
  88.       LOCATE Lig+8,Col:COLOR 12,0:PRINT MID$(C$(8),2,LigTaille-2)
  89.       DELAY(3)
  90.       PLAY MusiAir$
  91.       COLOR 7,0:CLS
  92.  
  93. ' *** how to get help ***
  94.  
  95.       C$(1)=Logiciel$+SPACE$(2)+"version "+Vers$
  96.       C$(2)="To get some help,  type [F1]"
  97.       C$(3)="Use numeric keypad arrows keys to edit"
  98.       C$(4)="Type [Esc]  to exit from"+CHR$(32)+Logiciel$
  99.       C$(5)=CHR$(179)+SPACE$(5)+_
  100.             "You must let the DOS system disk in the A: drive"+_
  101.             SPACE$(5)+CHR$(179)
  102.       C$(6)=CHR$(179)+CHR$(32)+_
  103.             "and put your work disk (not protected) into the B: drive"+_
  104.             CHR$(32)+CHR$(179)
  105.  
  106. ' *** exploding !!! ***
  107.  
  108.       FOR Lig=10 TO 16 STEP 2
  109.          Cour=Lig/2-4:Decal=0
  110.          FOR Col=Milieu TO Milieu-LEN(C$(Cour))/2+1 STEP -1
  111.             Decal=Decal+1
  112.             LOCATE Lig,Col:PRINT LEFT$(C$(Cour),Decal);RIGHT$(C$(Cour),Decal)
  113.             DELAY(0.03)
  114.          NEXT Col
  115.       NEXT Lig
  116.       LOCATE 10,Milieu-LEN(C$(1))/2+1:COLOR 14,0:PRINT C$(1)
  117.  
  118. ' *** malheureux possesseur d'un PC à seulement deux drives ***
  119.  
  120.       IF DiskUtil$="B:\" THEN
  121.          LOCATE 19,Milieu-LEN(C$(5))/2+1
  122.          COLOR 12,0:PRINT CHR$(218)+STRING$(LEN(C$(5))-2,196)+CHR$(191)
  123.          LOCATE 20,Milieu-LEN(C$(5))/2+1:COLOR 12,0:PRINT C$(5)
  124.          LOCATE 21,Milieu-LEN(C$(5))/2+1:COLOR 12,0:PRINT C$(6)
  125.          LOCATE 22,Milieu-LEN(C$(5))/2+1
  126.          COLOR 12,0:PRINT CHR$(192)+STRING$(LEN(C$(5))-2,196)+CHR$(217)
  127.       END IF
  128.    ELSE
  129.       PLAY MusiAir$
  130.    END IF
  131.  
  132. '═════════════════════════════════════════════════════════════════════════════
  133.  
  134. ' *** empty keyboard buffer ***
  135.  
  136.    REG %AX,&H0C00
  137.    CALL INTERRUPT &H21
  138.  
  139. ' *** display the first window with virgin command line ***
  140.  
  141.    GOSUB ECRAN
  142.  
  143. '═════════════════════════════════════════════════════════════════════════════
  144.  
  145. ' *** main loop ***
  146.  
  147. DO
  148.  
  149. ' *** reads keyboard buffer and write character in command line ***
  150.  
  151.    DO
  152.       IF FinCde$="" THEN
  153.          LOCATE 25,Posit:COLOR 31,4:PRINT Curs$;
  154.       ELSE
  155.          LOCATE 25,Posit:COLOR 31,4:PRINT LEFT$(FinCde$,1);
  156.       END IF
  157.       FlgAidePos=1
  158.       GOSUB ATTEND
  159.       IF FinCde$="" THEN
  160.          LOCATE 25,Posit:COLOR 11,1:PRINT CHR$(32);
  161.       ELSE
  162.          LOCATE 25,Posit:COLOR 11,1:PRINT LEFT$(FinCde$,1);
  163.       END IF
  164.       X=LEN(A$)
  165.       SELECT CASE X
  166.          CASE 1
  167.             Y=ASC(A$)
  168.             SELECT CASE Y
  169.  
  170. ' *** use of [<=] key to erase preceeding cursor character ***
  171.  
  172.                CASE 08
  173.                   IF LEN(DebCde$)>0 THEN
  174.                      DebCde$=LEFT$(DebCde$,LEN(DebCde$)-1)
  175.                      GOSUB ECRIT
  176.                   ELSE
  177.                      IF FlgBell=0 THEN PLAY MusiErr$
  178.                   END IF
  179.  
  180. ' *** test for [<┘] key to accept the command line ***
  181.  
  182.                CASE 13
  183.                   Cde$=DebCde$+FinCde$:DebCde$="":FinCde$=""
  184.                   GOSUB ECRIT
  185.                   IF Cde$<>"" THEN
  186.                      IF LEN(Cde$)>2 THEN
  187.                         IF (UCASE$(LEFT$(Cde$,3))=Logiciel$ OR_
  188.                             UCASE$(RIGHT$(Cde$,3))=Logiciel$) THEN
  189.                            FlgEDC=1:Cour=NoDerCde
  190.                         END IF
  191.                      END IF
  192.                      IF FlgEDC=0 THEN
  193.                         FOR I=1 TO NoDerCde
  194.                            IF UCASE$(Stor$(I-1))=UCASE$(Cde$) THEN
  195.                               FlgCde=1:PosCde=I:I=NoDerCde
  196.                            END IF
  197.                         NEXT I
  198.                         IF FlgCde=0 THEN
  199.                            IF NoDerCde>%MaxCde-1 THEN
  200.                               FOR I=1 TO %MaxCde-1
  201.                                  Stor$(I-1)=Stor$(I)
  202.                               NEXT I
  203.                               NoDerCde=NoDerCde-1
  204.                            END IF
  205.                         ELSE
  206.                            FOR I=PosCde TO NoDerCde-1
  207.                               Stor$(I-1)=Stor$(I)
  208.                            NEXT I
  209.                            NoDerCde=NoDerCde-1:FlgCde=0
  210.                         END IF
  211.                         Stor$(NoDerCde)=Cde$:NoDerCde=NoDerCde+1
  212.                         Cour=NoDerCde
  213.                      END IF
  214.                   END IF
  215.                   EXIT LOOP
  216.  
  217. ' *** [ESC] to quit DCE ***
  218.  
  219.                CASE 27
  220.                   IF FlgBell<>0 THEN
  221.                      SOUND 440,0:Alarme$=Depr$:FlgBell=0
  222.                   ELSE
  223.                      T$="":T=0
  224.                      WHILE T=0
  225.                         T=INT(TIMER-DebTemps&)
  226.                      WEND
  227.                      H=INT(T/3600.0)
  228.                      IF H>0 THEN
  229.                         T$=T$+STR$(H)+" hour"
  230.                         IF H>1 THEN
  231.                            T$=T$+"s"
  232.                         END IF
  233.                      END IF
  234.                      T=T-H*3600.0:H=INT(T/60.0)
  235.                      IF H>0 THEN
  236.                         T$=T$+STR$(H)+" minute"
  237.                         IF H>1 THEN
  238.